Routing এবং Middleware দুটি গুরুত্বপূর্ণ ধারণা যা Node.js এবং বিশেষভাবে Express.js ফ্রেমওয়ার্কে ওয়েব অ্যাপ্লিকেশন তৈরি করতে ব্যবহৃত হয়। এগুলি সার্ভারের রিকোয়েস্ট ও রেসপন্স হ্যান্ডলিং প্রক্রিয়াকে সহজ এবং কার্যকরী করে তোলে।
১. Routing in Express
Routing হল অ্যাপ্লিকেশনের URL পাথের জন্য নির্দিষ্ট ফাংশন বা হ্যান্ডলারের সাথে একটি রিকোয়েস্ট ম্যাপ করা। Express-এ, আপনি বিভিন্ন HTTP মেথড (যেমন GET, POST, PUT, DELETE) এবং URL পাথের ভিত্তিতে রিকোয়েস্ট হ্যান্ডলার ডিফাইন করতে পারেন।
Express Routing উদাহরণ:
const express = require('express');
const app = express();
// GET রিকোয়েস্ট হ্যান্ডলিং
app.get('/', (req, res) => {
res.send('Hello, World!');
});
// POST রিকোয়েস্ট হ্যান্ডলিং
app.post('/submit', (req, res) => {
res.send('Data submitted!');
});
// PUT রিকোয়েস্ট হ্যান্ডলিং
app.put('/update', (req, res) => {
res.send('Data updated!');
});
// DELETE রিকোয়েস্ট হ্যান্ডলিং
app.delete('/delete', (req, res) => {
res.send('Data deleted!');
});
// সার্ভার লিসেনিং
app.listen(3000, () => {
console.log('Server is running on http://localhost:3000');
});এখানে, বিভিন্ন HTTP মেথডের জন্য রিকোয়েস্ট হ্যান্ডলার তৈরি করা হয়েছে। আপনি app.get(), app.post(), app.put(), এবং app.delete() মেথড ব্যবহার করে রুট (URL পাথ) অনুযায়ী রিকোয়েস্ট হ্যান্ডলিং করতে পারেন।
২. Route Parameters
Express-এ আপনি ডাইনামিক পাথ প্যারামিটার ব্যবহার করতে পারেন, যা রুটের অংশ হিসেবে ডেটা গ্রহণ করতে সহায়তা করে।
উদাহরণ:
app.get('/user/:id', (req, res) => {
let userId = req.params.id; // পাথ প্যারামিটার অ্যাক্সেস করা
res.send(`User ID is: ${userId}`);
});এখানে, /user/:id রুটটি একটি ডাইনামিক প্যারামিটার id গ্রহণ করবে এবং সেই অনুযায়ী ডেটা রেসপন্স করবে।
Example:
- রিকোয়েস্ট:
/user/123 - আউটপুট:
User ID is: 123
৩. Middleware in Express
Middleware হলো এমন ফাংশন যা HTTP রিকোয়েস্ট এবং রেসপন্স অবজেক্টের মধ্যবর্তী অংশে চলতে থাকে। Middleware ব্যবহার করে আপনি বিভিন্ন কাজ যেমন রিকোয়েস্ট ভ্যালিডেশন, লগিং, অথেনটিকেশন, রেসপন্স ফিল্টারিং ইত্যাদি করতে পারেন।
Express-এ middleware দুটি ধরনের হতে পারে:
- Application-level middleware: এই middleware সমস্ত রিকোয়েস্টের জন্য প্রযোজ্য।
- Route-specific middleware: এই middleware শুধুমাত্র নির্দিষ্ট রুটে প্রযোজ্য।
Middleware উদাহরণ:
const express = require('express');
const app = express();
// Application-level Middleware
app.use((req, res, next) => {
console.log('Middleware 1: Request received');
next(); // Request কে পরবর্তী middleware বা route handler এ পাঠানো
});
// Route-level Middleware
app.get('/home', (req, res, next) => {
console.log('Middleware 2: Handling /home route');
next(); // Request কে পরবর্তী handler এ পাঠানো
}, (req, res) => {
res.send('Welcome to Home!');
});
// Application-level Middleware for logging request method
app.use((req, res, next) => {
console.log(`Method: ${req.method} | URL: ${req.url}`);
next();
});
// সার্ভার লিসেনিং
app.listen(3000, () => {
console.log('Server is running on http://localhost:3000');
});Output:
Middleware 1: Request receivedMiddleware 2: Handling /home routeMethod: GET | URL: /home
এখানে, প্রথম middleware সমস্ত রিকোয়েস্টের জন্য কার্যকর, এবং দ্বিতীয় middleware শুধুমাত্র /home রুটের জন্য কার্যকর। প্রতিটি middleware ফাংশন next() কলের মাধ্যমে পরবর্তী ফাংশন বা রুট হ্যান্ডলারের দিকে রিকোয়েস্ট পাঠায়।
৪. Error Handling Middleware
Express-এ আপনি একটি error-handling middleware তৈরি করতে পারেন, যা কোনো ত্রুটি (error) হলে ডিফাইন করা হয়।
Error Handling Middleware উদাহরণ:
app.use((req, res, next) => {
const err = new Error('Something went wrong');
err.status = 500;
next(err); // Error কে পরবর্তী error-handling middleware এ পাঠানো
});
app.use((err, req, res, next) => {
res.status(err.status || 500).send({ error: err.message });
});এখানে, প্রথম middleware একটি ত্রুটি তৈরি করছে এবং next(err) এর মাধ্যমে এই ত্রুটিকে error-handling middleware এ পাঠাচ্ছে। error-handling middleware ত্রুটির স্ট্যাটাস এবং মেসেজ পাঠায়।
৫. Chaining Middleware
Express-এ একাধিক middleware ফাংশন চেইন আকারে ব্যবহার করা যেতে পারে। প্রতিটি middleware পরবর্তী middleware বা রুট হ্যান্ডলারকে next() কলের মাধ্যমে চালু করতে পারে।
উদাহরণ: Middleware চেইনিং
app.use((req, res, next) => {
console.log('Middleware 1');
next(); // পরবর্তী middleware বা route handler এ পাঠানো
});
app.use((req, res, next) => {
console.log('Middleware 2');
next(); // পরবর্তী middleware বা route handler এ পাঠানো
});
app.get('/', (req, res) => {
res.send('Chained Middleware Example');
});Output:
Middleware 1
Middleware 2এখানে, দুটি middleware একে অপরকে চেইনিং করে কার্যকর হচ্ছে এবং শেষে রুট হ্যান্ডলার / রিকোয়েস্টের জন্য রেসপন্স পাঠাচ্ছে।
সারাংশ
- Routing: Express-এ রাউটিং হল URL পাথ অনুযায়ী রিকোয়েস্ট হ্যান্ডল করা। আপনি GET, POST, PUT, DELETE ইত্যাদি HTTP মেথডের সাথে রাউট তৈরি করতে পারেন।
- Route Parameters: রাউটের মধ্যে ডাইনামিক প্যারামিটার ব্যবহার করে ডেটা গ্রহণ করা যায় (যেমন
:id). - Middleware: Middleware হল ফাংশন যা HTTP রিকোয়েস্ট এবং রেসপন্সের মধ্যে মধ্যবর্তী অংশে কাজ করে, যেমন অথেনটিকেশন, লগিং, ইত্যাদি।
- Error Handling: Express-এ error-handling middleware ব্যবহার করে সহজেই ত্রুটি পরিচালনা করা যায়।
Express.js এ Routing এবং Middleware ব্যবহার করে আপনি ওয়েব অ্যাপ্লিকেশনকে মডুলার, স্কেলেবেল এবং সুরক্ষিত করে তুলতে পারেন।
Read more